package in.lib.handler.base; import in.lib.Debug; import in.lib.thread.FragmentRunnable; import in.model.User; import in.rob.client.page.base.StreamFragment; import lombok.Getter; import lombok.Setter; import android.content.Context; import android.widget.Toast; import com.google.gson.JsonElement; import com.google.gson.JsonObject; /** * Standard response handler for individual user * * Use {@link #getUser()} in {@link #onCallback()} to get the returned user */ public abstract class UserResponseHandler<T extends StreamFragment> extends RobinResponseHandler<T> { @Getter @Setter private User user; @Getter @Setter private String failMessage = ""; @Getter @Setter private Boolean didFail = false; public UserResponseHandler(Context c) { super(c); } @Override public void onSend() { super.onSend(); if (getFragment() != null) { getFragment().setLoading(true); } } @Override public void onSuccess() { JsonElement elements = getContent(); if (elements != null) { try { JsonObject jUser = elements.getAsJsonObject().get("data").getAsJsonObject(); user = new User().createFrom(jUser); if (user == null) return; onCallback(); } catch (Exception e) { Debug.out(e); setDidFail(true); } } else { setDidFail(true); } } @Override public void onFinish(boolean failed) { if (failed || didFail) { Debug.out(getConnectionInfo()); if (getFragment() != null) { getFragment().runWhenReady(new FragmentRunnable<StreamFragment>() { @Override public void run() { getFragment().getRefreshHelper().finish(); getFragment().setLoading(false); Toast.makeText(getFragment().getContext(), getFailMessage(), Toast.LENGTH_SHORT).show(); } }); } } } /** * Implement this callback and use {@link #getUser()} to get the returned List of posts * For fragments, use onCallback to execute {@link RobinFragment.runWhenReady()} and pass <b>this</b> * Then override {@link #run()} to finish the adapter stuff. */ public abstract void onCallback(); }